home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / tutorc.arj / EJERCPP.DAT < prev    next >
Encoding:
Text File  |  1993-05-06  |  36.3 KB  |  1,534 lines

  1. ;
  2. ; EJEMPLOS DEL LENGUAJE CPP
  3. ;
  4.  
  5. ; LECCION 1
  6. begin
  7. begine "psc"
  8. pregunta
  9.   ¿Cuál es el principal problema que posee el lenguaje C en grandes
  10.   proyectos informáticos?
  11. respuesta
  12.   El inconveniente que tiene el C en el desarrollo de grandes sistemas
  13.   software reside en la gran libertad que tienen los programadores en
  14.   el acceso a los datos y a las funciones de los distintos módulos.
  15. ende
  16. begine "test"
  17. pregunta
  18.  
  19.   ¿Se puede considerar el C++ como un lenguaje orientado a objetos?
  20. opciones
  21. No
  22. respuesta
  23. 1
  24. ende
  25. begine "pcc"
  26. pregunta
  27.  
  28.   ¿Quién fue el creador del lenguaje C++?
  29. respuesta
  30. Bjarne Stroustrup
  31. ende
  32. begine "test"
  33. pregunta
  34.   ¿Se puede considerar el C++ como un superconjunto del C de tal forma
  35.   que la mayor parte de los que conocemos del C es aplicable al C++?
  36. opciones
  37. No
  38. respuesta
  39. 1
  40. ende
  41. begine "psc"
  42. pregunta
  43.   ¿Cuáles son las tres características principales de la programación
  44.   orientada a objetos?
  45. respuesta
  46.   Las tres características principales de la programación orientada a
  47.   objetos son: encapsulación, herencia y polimorfismo.
  48. ende
  49. begine "psc"
  50. pregunta
  51.  
  52.   Da una definición de objeto en el entorno de la OOP.
  53. respuesta
  54.   Un objeto es un conjunto formado por datos y funciones que manipulan
  55.   esos datos.
  56. ende
  57. begine "psc"
  58. pregunta
  59.  
  60.  ¿Qué es lo que necesita conocer un usuario de un objeto para utilizarlo?
  61. respuesta
  62.   Un usuario necesita conocer la interface o la forma de comunicarse con
  63.   el objeto para poder utilizarlo.
  64. ende
  65. begine "test"
  66. pregunta
  67.   ¿Necesita conocer un usuario cómo están implementadas las funciones de
  68.   un objeto y cuáles son todos sus datos para poder utilizarlo en un pro-
  69.   grama?
  70. opciones
  71. Sí necesita tales conocimientos
  72. No necesita tales conocimientos
  73. respuesta
  74. 2
  75. ende
  76. begine "test"
  77. pregunta
  78.  
  79.   ¿Puede un objeto heredar las características de otro objeto?
  80. opciones
  81. Sí puede
  82. No puede
  83. respuesta
  84. 1
  85. ende
  86. end
  87.  
  88. ; LECCION 2
  89. begin
  90. begine "psc"
  91. pregunta
  92.  
  93.   ¿Cuál es la diferencia entre /* y //?
  94. respuesta
  95.   Los caracteres /* indican el comienzo de un comentario que termina
  96.   con los caracteres */. Los caracteres // indican el comienzo de un
  97.   comentario que termina al final de la línea en la que están situados.
  98. ende
  99. begine "psc"
  100. pregunta
  101. // ¿Qué imprime printf()?
  102. #include <stdio.h>
  103. void main (void) { int i; for (int i = 2; i < 3; i++); printf ("%d", i); }
  104. respuesta
  105. El programa presentado es incorrecto:hay dos variables con el mismo nombre
  106. definidas en mismo nivel. La compilación de este programa provoca un error
  107. de compilación. Si no apareciese el primer int i, printf() imprimiría un 3
  108. ende
  109. begine "test"
  110. pregunta
  111.   ¿Son var1 y var2 del mismo tipo?
  112.   enum boolean { false, true };
  113.   boolean var1; enum boolean var2;
  114. opciones
  115. No
  116. respuesta
  117. 1
  118. ende
  119. begine "test"
  120. pregunta
  121.   // ¿Qué imprime printf()?
  122.   #include <stdio.h>
  123.   int i = 1; main () { int i = 2; { int i = 3; printf ("%d", ::i); } }
  124. opciones
  125. El valor 0.
  126. El valor 1.
  127. El valor 2.
  128. El valor 3.
  129. Un valor indefinido.
  130. respuesta
  131. 2
  132. ende
  133. begine "test"
  134. pregunta
  135.   // ¿Es correcto este programa?
  136.   #include <stdio.h>
  137.   void main (void) { int& i = 10; }
  138. opciones
  139. No
  140. respuesta
  141. 1
  142. ende
  143. begine "test"
  144. pregunta
  145.   // ¿Es correcto este programa?
  146.   #include <stdio.h>
  147.   void main (void) { int& i; }
  148. opciones
  149. No
  150. respuesta
  151. 2
  152. ende
  153. begine "pcc"
  154. pregunta
  155.   // ¿Qué imprime la sentencia printf()?
  156.   #include <stdio.h>
  157.   void main (void) { int x = 3; int& y = x; y += x; printf ("%d", x); }
  158. respuesta
  159. 6
  160. ende
  161. begine "pcc"
  162. pregunta
  163.   // ¿Qué imprime la sentencia printf()?
  164.   #include <stdio.h>
  165.   main () { int x = 3; int& y = x; int& z = y + x; printf ("%d", x); }
  166. respuesta
  167. 3
  168. ende
  169. begine "pcc"
  170. pregunta
  171.   // ¿Qué imprime la sentencia printf()?
  172.   #include <stdio.h>
  173.   main () { int& x = 3; int& y = x; int& z = y + x; printf ("%d", x); }
  174. respuesta
  175. 3
  176. ende
  177. begine "test"
  178. pregunta
  179.   ¿Es legal esta definición de función?
  180.   char& f (void) { char d; return d; }
  181. opciones
  182. SI
  183. NO
  184. respuesta
  185. 2
  186. ende
  187. begine "psc"
  188. pregunta
  189.  
  190.   ¿Qué es una unión anónima?
  191. respuesta
  192.  
  193.   Una unión anónima es una unión que no tiene nombre.
  194. ende
  195. begine "test"
  196. pregunta
  197.   ¿De qué tipo es esta expresión?
  198.   double (10) - 20 + 'e' - int ((float) '\n')
  199. opciones
  200. char
  201. int
  202. float
  203. double
  204. respuesta
  205. 4
  206. ende
  207. begine "psc"
  208. pregunta
  209.   ¿Qué diferencia hay entre f1() y f2()?
  210.   inline void f1 (void) { printf ("Hola"); }
  211.   void f2 (void) { printf ("Hola"); }
  212. respuesta
  213.   f1() es tratada como una macro.
  214.   f2() es una función propiamente dicho.
  215. ende
  216. begine "test"
  217. pregunta
  218.  
  219.   ¿Cuál de las declaraciones del menú es incorrecta?
  220. opciones
  221. void f1 (float = 2.3, int = 0);
  222. void f2 (char * = "abc");
  223. void f3 (int = 10, char);
  224. void f4 (const int = 50, double = '1');
  225. void f5 (register char, char = '\t');
  226. void f6 (register const unsigned long int x);
  227. respuesta
  228. 3
  229. ende
  230. begine "test"
  231. pregunta
  232.  ¿Son correctas estas declaraciones?
  233.  void f (double, int), f (int, double), f (double, double), f (int, int);
  234. opciones
  235. No
  236. respuesta
  237. 1
  238. ende
  239. begine "test"
  240. pregunta
  241.   ¿Son correctas estas declaraciones?
  242.   int x (void);
  243.   double x (void);
  244. opciones
  245. No
  246. respuesta
  247. 2
  248. ende
  249. begine "psc"
  250. pregunta
  251.   «En C++ es preferible utilizar las funciones new y delete a las
  252.   funciones malloc, calloc y free».
  253.   ¿Es cierta esta afirmación?
  254. respuesta
  255.  
  256.   No, porque new y delete no son funciones sino operadores unarios.
  257. ende
  258. begine "psc"
  259. pregunta
  260.   ¿Porqué esta sentencia no asigna un array de 10 punteros a funciones?
  261.   new int (* [10]) (void);
  262. respuesta
  263.   La sentencia new int (* [10]) (void); provoca un error de compilación
  264.   porque es interpretada como: (new int) (* [10]) (void); ya que new es
  265.   un operador unario. Lo correcto es hacer: new (int (* [10]) (void));
  266. ende
  267. begine "psc"
  268. pregunta
  269.   ¿Qué fichero(s) es necesario incluir para utilizar los identificadores
  270.   cout y cin junto con sus correspondientes operadores sobrecargados >>
  271.   y <<?
  272. respuesta
  273.   El fichero a incluir es, bien stream.h, o bien iostream.h.
  274.   El segundo fichero es preferible al primero si se dispone de ambos.
  275. ende
  276. begine "psc"
  277. pregunta
  278. El ámbito de un nombre empieza en su punto de declaración; esto signi-
  279. fica que un nombre puede ser usado incluso para especificar su propio
  280. valor inicial. ¿Qué pasa entonces con: int x = 1; main () { int x = x; }?
  281. respuesta
  282. Las sentencias de C++ presentadas no son ilegales, pero es probable que el
  283. compilador informe del aviso: variable utilizada antes de que se le asigne
  284. un valor. A la variable local x no se le asigna el valor de la x global.
  285. ende
  286. begine "test"
  287. pregunta
  288.   ¿Es legal esta definición?
  289.   void f (int x) { int x; }
  290. opciones
  291. No
  292. respuesta
  293. 2
  294. ende
  295. begine "test"
  296. pregunta
  297.   // ¿Son correctas estas sentencias?
  298.   struct s1 { int a, b; };
  299.   s1 x = { 3, 4 }; s1 y = x;
  300. opciones
  301. No
  302. respuesta
  303. 1
  304. ende
  305. begine "psc"
  306. pregunta
  307.   // ¿Son correctas estas sentencias?
  308.   struct s1 { int a; }; struct s2 { int b; };
  309.   s1 x = { 3 }; s1 y = x;
  310. respuesta
  311.   Las sentencias anteriores no son correctas puesto que s1 y s2 son
  312.   de dos tipos diferentes. Aparece un error de compilación en la
  313.   asignación: y = x.
  314. ende
  315. begine "test"
  316. pregunta
  317.   ¿Es legal esta declaración?
  318.   const int a;
  319. opciones
  320.  Sí
  321.  No
  322. respuesta
  323. 2
  324. ende
  325. begine "prpr"
  326. /*
  327.   Convierte este programa C (o estilo C en C++) en un programa C++.
  328.  
  329.   Para ello realiza los siguientes cambios:
  330.  
  331.   - Convierte los comentarios que abarcan una línea con el estilo de
  332.     comentario //.
  333.  
  334.   - Haz inline la función desplazar().
  335.  
  336.   - Convierte los parámetros de desplazar() en llamadas por referencia
  337.     utilizando el operador de referencia & en vez de la notación puntero
  338.     que es más engorrosa.
  339.  
  340.   - Cambia la inclusión del fichero stdio.h por el iostream.h (si no
  341.     dispones de este fichero, utiliza stream.h) para utilizar el flujo
  342.     de salida cout en vez de la función printf().
  343. */
  344.  
  345. #include <stdio.h>
  346.  
  347. /* desplazamiento circular de pc1 hacia pc4 */
  348. void desplazar (char *pc1, char *pc2, char *pc3, char *pc4)
  349. {
  350.   char temp;
  351.   temp = *pc1, *pc1 = *pc2, *pc2 = *pc3, *pc3 = *pc4, *pc4 = temp;
  352. }
  353.  
  354. /* función principal */
  355. void main (void)
  356. {
  357.   char c1, c2, c3, c4;
  358.  
  359.   c1 = 'A', c2 = c1 + 1, c3 = c2 + 1, c4 = c3 + 1;
  360.  
  361.   printf ("\nValores iniciales: %c %c %c %c", c1, c2, c3, c4);
  362.  
  363.   desplazar (&c1, &c2, &c3, &c4);
  364.  
  365.   printf ("\nValores finales: %c %c %c %c", c1, c2, c3, c4);
  366. }
  367. ende
  368. begine "prpr"
  369.  
  370.   Intenta convertir los programas de ejemplos que se encuentran en el
  371.   tutor de C a programas C++.
  372. ende
  373. end
  374.  
  375. ; LECCION 3
  376. begin
  377. begine "psc"
  378. pregunta
  379.   ¿Cómo se les llama a los elementos de un objeto (un objeto es una
  380.   variable de tipo estructura, clase o unión)?
  381. respuesta
  382.  
  383.   Miembros. Un objeto puede tener datos miembros y funciones miembros.
  384. ende
  385. begine "psc"
  386. pregunta
  387.   ¿De qué tipos pueden ser los miembros de un objeto desde el punto de
  388.   vista de la visibilidad?
  389. respuesta
  390.   Desde el punto de vista de la visibilidad o la accesibilidad a ellos,
  391.   los miembros de un objeto pueden ser públicos, privados y protegidos.
  392.   Estos últimos no se han explicado en esta lección.
  393. ende
  394. begine "test"
  395. pregunta
  396.   ¿Es correcta esta declaración?
  397.   struct estructura { private: public: private: int x; };
  398. opciones
  399. No
  400. respuesta
  401. 1
  402. ende
  403. begine "psc"
  404. pregunta
  405.   ¿Es correcta esta declaración?
  406.   struct { int x; };
  407. respuesta
  408.  No es correcta: esta declaración no declara nada. C++ requiere que sea
  409.  declarado algo. Para que sea correcta tendría que declararse un tipo y/o
  410.  una variable. Ejemplos: struct tst { int x; }; struct { int x; } vst;
  411. ende
  412. begine "test"
  413. pregunta
  414.   ¿Es correcta esta declaración?
  415.   struct estructura { private: public: private: int x; public: };
  416. opciones
  417. No
  418. respuesta
  419. 1
  420. ende
  421. begine "test"
  422. pregunta
  423.   ¿Es correcta esta declaración?
  424.   struct { int x; } s = { 10 };
  425. opciones
  426. No
  427. respuesta
  428. 1
  429. ende
  430. begine "test"
  431. pregunta
  432.   ¿Es correcta esta declaración?
  433.   struct { private: int x; } s = { 10 };
  434. opciones
  435. No
  436. respuesta
  437. 2
  438. ende
  439. begine "test"
  440. pregunta
  441.   ¿Es correcta esta declaración?
  442.   class { int x; } c = { 10 };
  443. opciones
  444. No
  445. respuesta
  446. 2
  447. ende
  448. begine "test"
  449. pregunta
  450.   ¿Es correcta esta declaración?
  451.   class { public: int x; } c = { 10 };
  452. opciones
  453. No
  454. respuesta
  455. 1
  456. ende
  457. begine "test"
  458. pregunta
  459.   ¿Es correcta esta declaración?
  460.   class { public: int x; } c = 10;
  461. opciones
  462. No
  463. respuesta
  464. 2
  465. ende
  466. begine "test"
  467. pregunta
  468.   ¿Es inline la función f()?
  469.   class clase { int x; public: void f (void) { x = 0; } };
  470. opciones
  471. Sí lo es
  472. No lo es
  473. respuesta
  474. 1
  475. ende
  476. begine "pcc"
  477. pregunta
  478. #include <iostream.h> // ¿Qué valor se imprime en la salida estándar?
  479. int x=1; struct st { int x; int dev () { int x=3; return x+st::x+::x; } };
  480. void main (void) { st s = { 2 }; cout << s.dev (); }
  481. respuesta
  482. 6
  483. ende
  484. begine "pcc"
  485. pregunta
  486. #include <iostream.h> // ¿Qué valor se imprime en la salida estándar?
  487. int x=1; struct st { int x; int dev () { int x=3; return x+st::x+::x; } };
  488. void main (void) { int x = 4; st s = { 2 }; cout << s.dev (); }
  489. respuesta
  490. 6
  491. ende
  492. begine "pcc"
  493. pregunta
  494. #include <iostream.h> // ¿Qué valor se imprime en la salida estándar?
  495. struct st { int x; static int y; void inic() { x=0; y++; } }; int st::y=0;
  496. void main (void) { st s1, s2; s1.inic(),s2.inic(); cout << s1.x << s1.y; }
  497. respuesta
  498. 02
  499. ende
  500. begine "psc"
  501. pregunta
  502. class X { int x; // ¿Dónde está el error en esta declaración anidada?
  503.   class Y { int y;
  504.     int devx (void) { return x; } int devy (void) { return y; } }; };
  505. respuesta
  506. En que la función miembro devx() de la clase Y intenta acceder a x que
  507. es un miembro privado de la clase X. Esto error viene de que las clases
  508. X e Y están declaradas, en realidad, al mismo nivel, aunque no lo parezca.
  509. ende
  510. begine "psc"
  511. pregunta
  512.  
  513.   ¿Cuáles son los operadores específicos de C++?
  514. respuesta
  515.   Los operadores específicos de C++, esto es, los que no posee el C, son:
  516.  
  517.       new        delete          ::            .*              ->*
  518. ende
  519. begine "prpr"
  520.  
  521.   Modifica el programa del primer ejemplo de esta lección, en el cual
  522.   está implementado la clase ent, para cambiar esta clase por la clase
  523.   uent. La clase uent tiene el mismo propósito que la clase ent pero
  524.   en vez de trabajar con el tipo int, trabaja con el tipo unsigned int.
  525. ende
  526. end
  527.  
  528. ; LECCION 4
  529. begin
  530. begine "test"
  531. pregunta
  532.   ¿Debe tener obligatoriamente un constructor de una clase el mismo
  533.   nombre que la clase?
  534. opciones
  535. Sí es obligatorio
  536. No es obligatorio
  537. respuesta
  538. 1
  539. ende
  540. begine "psc"
  541. pregunta
  542.  
  543.   ¿Cuál debe ser el nombre del destructor de una clase?
  544. respuesta
  545.   El nombre del destructor de una clase debe ser el nombre de la clase
  546.   precedido por el carácter ~.
  547. ende
  548. begine "test"
  549. pregunta
  550.  
  551.  ¿Pueden sobrecargarse y tener argumentos por defecto los constructores?
  552. opciones
  553. No
  554. respuesta
  555. 1
  556. ende
  557. begine "test"
  558. pregunta
  559.  
  560.   ¿Pueden sobrecargarse y tener argumentos por defecto los destructores?
  561. opciones
  562. No
  563. respuesta
  564. 2
  565. ende
  566. begine "test"
  567. pregunta
  568.   ¿Son correctas estas declaraciones?
  569.   class clase { int x; public: clase (int = 0, int = 0, int = 0); };
  570.   clase c1 (10), c2, c3 (1, -2), c4 (10, 20, 30);
  571. opciones
  572. Sí lo son.
  573. No lo son.
  574. respuesta
  575. 1
  576. ende
  577. begine "psc"
  578. pregunta
  579.   ¿Qué condición debe cumplir los constructores de una clase para que
  580.   dicha clase pueda ser el tipo base de un vector?
  581. respuesta
  582.   Para declarar un vector de objetos con constructores, estos objetos
  583.   deben tener un constructor que no acepte ningún argumento.
  584. ende
  585. begine "psc"
  586. pregunta
  587. struct sta { int x; sta::sta (int i = 0) { x = i; } };
  588. struct stb { int x; sta sa; stb::stb (int i = 1): sa (2 * i) { x = i; } };
  589. void main (void) { stb sb; cout << sb.x << sb.sa.x; } //¿qué imprime cout?
  590. respuesta
  591. Tal y como está, el compilador informará de símbolo indefinido en cout, ya
  592. que no se ha incluido ni el fichero stream.h ni el fichero iostream.h. Si
  593. se hubiese incluido uno de estos dos ficheros, el programa imprimiría «12»
  594. ende
  595. begine "pcc"
  596. pregunta
  597.  #include <iostream.h>     // ¿Qué imprime este programa?
  598.  struct x { int a; x (int i) { a = i; } int dev (void) { return
  599.  a + x::a + this->a; } }; void main (void) { x x (3); cout << x.dev (); }
  600. respuesta
  601. 9
  602. ende
  603. begine "test"
  604. pregunta
  605.   ¿Es correcta la declaración de cl?
  606.   class clase { int x; clase (int i = 0) { x = i; } } cl (4);
  607. opciones
  608. Sí es correcta
  609. No es correcta
  610. respuesta
  611. 2
  612. ende
  613. begine "psc"
  614. pregunta
  615.  
  616.   ¿Cuál es el primer argumento de las funciones miembros?
  617. respuesta
  618.  El primer argumento de todas las funciones miembros está oculto, aunque
  619.  lo podemos utilizar, y es un puntero al objeto para el cual se ha invo-
  620.  cado la función miembro; el nombre de este puntero es this.
  621. ende
  622. begine "psc"
  623. pregunta
  624.   ¿Qué crees que hace el compilador de C++ para no permitir que una
  625.   función miembro constante modifique algún dato miembro de ese objeto?
  626. respuesta
  627. A toda función miembro de una clase X se le pasa el puntero this. Por de-
  628. fecto, el tipo de this es X *const (puntero constante a tipo X). El cali-
  629. ficador const cambia el tipo a const X *const (punt. const. a dato const.)
  630. ende
  631. begine "prpr"
  632.  
  633.   Modifica el programa del primer ejemplo de esta lección, en el cual
  634.   está implementado la clase conj_int, para cambiar esta clase por la
  635.   clase conj_cad. La clase conj_cad tiene el mismo propósito que la
  636.   clase conj_int pero en vez de trabajar con enteros, trabaja con ca-
  637.   denas de caracteres.
  638. ende
  639. begine "prpr"
  640.  
  641.   Añade las siguientes funciones miembros a la clase lista implementada
  642.   en el segundo ejemplo de esta lección. Modifica la función main() para
  643.   probar las nuevas funciones miembros implementadas.
  644.  
  645.   // lista es un construtor cuyo inicializador es un array de caracteres
  646.   lista::lista (char *s);
  647.  
  648.   // longitud devuelve la longitud de la lista, esto es, el número de
  649.   // nodos que tiene
  650.   int lista::longitud (void);
  651.  
  652.   // devuelve el número de nodos de la lista que contienen como dato el
  653.   // valor c
  654.   int lista::cont_c (char c);
  655.  
  656.   // suprime todos lo nodos de la lista que tengan como dato el valor c
  657.   void lista::quitar_c (char c);
  658. ende
  659. end
  660.  
  661. ; LECCION 5
  662. begin
  663. begine "test"
  664. pregunta
  665.   ¿De qué tipo es esta expresión?
  666.   'a' + 0
  667. opciones
  668. char
  669. int
  670. long
  671. float
  672. double
  673. respuesta
  674. 2
  675. ende
  676. begine "test"
  677. pregunta
  678.   ¿De qué tipo es esta expresión?
  679.   int (2.1) + float (5)
  680. opciones
  681. char
  682. int
  683. long
  684. float
  685. double
  686. respuesta
  687. 4
  688. ende
  689. begine "test"
  690. pregunta
  691.   ¿De qué tipo es esta expresión?
  692.   2L - 6 + (unsigned) 5
  693. opciones
  694. char
  695. int
  696. long
  697. float
  698. double
  699. respuesta
  700. 3
  701. ende
  702. begine "test"
  703. pregunta
  704.   ¿De qué tipo es esta expresión?
  705.   (int) 5 + (double) 4.0
  706. opciones
  707. char
  708. int
  709. long
  710. float
  711. double
  712. respuesta
  713. 5
  714. ende
  715. begine "pcc"
  716. pregunta
  717.   ¿Qué escribe la siguiente sentencia?
  718.   cout << float (int (5.6));
  719. respuesta
  720. 5
  721. ende
  722. begine "test"
  723. pregunta
  724.   ¿Son equivalentes estas dos expresiones?
  725.   (int) 2 + 3.0
  726.   int (2 + 3.0)
  727. opciones
  728. Sí son equivalentes
  729. No son equivalentes
  730. respuesta
  731. 2
  732. ende
  733. begine "test"
  734. pregunta
  735.   ¿Son equivalentes estas dos expresiones?
  736.   (int) (2 + 3.0)
  737.   int (2 + 3.0)
  738. opciones
  739. Sí son equivalentes
  740. No son equivalentes
  741. respuesta
  742. 1
  743. ende
  744. begine "test"
  745. pregunta
  746.   ¿Son equivalentes estas dos declaraciones?
  747.   struct st { int x; st (int i) { x = i; } } st = { 5 };
  748.   struct st { int x; st (int i) { x = i; } } st = 5;
  749. opciones
  750. Sí son equivalentes
  751. No son equivalentes
  752. respuesta
  753. 1
  754. ende
  755. begine "test"
  756. pregunta
  757.   ¿Son equivalentes estas dos declaraciones?
  758.   class cl { int x; st (int i) { x = i; } } cl = { 5 };
  759.   class cl { int x; public: st (int i) { x = i; } } cl = 5;
  760. opciones
  761. Sí son equivalentes
  762. No son equivalentes
  763. respuesta
  764. 2
  765. ende
  766. begine "psc"
  767. pregunta
  768.   ¿Para qué se utilizan las funciones miembros definidas de esta forma?
  769.   operator tipo () { ... }
  770. respuesta
  771.   Este tipo de funciones se utilizan para realizar conversiones de tipos
  772.   (implícitas y explícitas) del tipo de la clase en la que está definida
  773.   al tipo que lleva el nombre de dicha función operator.
  774. ende
  775. begine "psc"
  776. pregunta
  777.  
  778.   ¿Para qué se utiliza el especificador friend?
  779. respuesta
  780.   El especificador friend se utiliza para declarar funciones y clases
  781.   amigas de otra clase. Las funciones y clases amigas a una clase pueden
  782.   acceder a los miembros privados de esa clase.
  783. ende
  784. begine "test"
  785. pregunta
  786.  
  787.   ¿Qué operador del menú no se puede sobrecargar?
  788. opciones
  789. Operador coma ,
  790. Operador de miembro .
  791. Operador new
  792. Operador delete
  793. Operador de llamada a función ()
  794. Operador de indexado []
  795. Operador de puntero de clase ->
  796. respuesta
  797. 2
  798. ende
  799. begine "test"
  800. pregunta
  801.   Si sobrecargamos el operador ++ para el tipo X, ¿podemos distinguir
  802.   entre preincremento y postincremento cuando este operador se aplica
  803.   a un operando de tipo X?
  804. opciones
  805. Sí se puede distinguir
  806. No se puede distinguir
  807. respuesta
  808. 2
  809. ende
  810. begine "test"
  811. pregunta
  812.   ¿Se pueden definir nuevos tokens (símbolos) de operadores, por
  813.   ejemplo, el token ** para representar un operador de potencia?
  814. opciones
  815. Sí se pueden definir
  816. No se pueden definir
  817. respuesta
  818. 2
  819. ende
  820. begine "test"
  821. pregunta
  822.   ¿Se conserva la asociatividad y la precedencia en los operadores
  823.   sobrecargados?
  824. opciones
  825. Sí se conserva
  826. No se conserva
  827. respuesta
  828. 1
  829. ende
  830. begine "psc"
  831. pregunta
  832.  
  833.   ¿Cuál es el nombre de una función operador?
  834. respuesta
  835.   El nombre de una función operador está compuesto por la palabra clave
  836.   operator seguida por el operador.
  837. ende
  838. begine "test"
  839. pregunta
  840.  
  841.  ¿Es obligatorio que las funciones de operadores sean funciones miembros?
  842. opciones
  843. Sí es obligatorio
  844. No es obligatorio
  845. respuesta
  846. 2
  847. ende
  848. begine "test"
  849. pregunta
  850.   ¿Es correcta esta declaración?
  851.   class x { x operator+ (x, x); };
  852. opciones
  853. Sí es correcta
  854. No es correcta
  855. respuesta
  856. 2
  857. ende
  858. begine "test"
  859. pregunta
  860.  
  861.   ¿Hay algún operador predefinido que se pueda aplicar a los objetos?
  862. opciones
  863. Sí lo hay
  864. No lo hay
  865. respuesta
  866. 1
  867. ende
  868. begine "test"
  869. pregunta
  870.   Si sobrecargamos el operador ++ para la clase X siendo x un objeto de
  871.   tipo X, ¿podemos decir que x++ es equivalente a x+=1?
  872. opciones
  873. Sí es equivalente
  874. No es equivalente
  875. respuesta
  876. 2
  877. ende
  878. begine "psc"
  879. pregunta
  880.  
  881.   ¿Por qué motivo no se pueden sobrecargar los operadores # y ##?
  882. respuesta
  883.   Los operadores # y ## no se pueden sobrecargar porque no son operadores
  884.   del lenguaje C++ sino del preprocesador de C++.
  885. ende
  886. begine "psc"
  887. pregunta
  888.   ¿Por qué es preferible pasar por referencia a las funciones los
  889.   objetos grandes?
  890. respuesta
  891.   Si se pasa un objeto x por referencia, se está pasando una dirección
  892.   (normalmente son 2 ó 4 bytes), pero si se pasa por valor, se está pa-
  893.   sando el objeto x completo, es decir, se están pasando sizeof(x) bytes.
  894. ende
  895. begine "psc"
  896. pregunta
  897.  
  898. ¿En qué consiste la asignación e inicialización por defecto entre objetos?
  899. respuesta
  900.  Por defecto, las asignaciones e inicializaciones entre objetos consisten
  901.  en la copia del contenido de uno al contenido del otro, haciéndose esta
  902.  copia elemento a elemento.
  903. ende
  904. begine "test"
  905. pregunta
  906.  
  907.   ¿Es siempre lo mismo asignación que inicialización?
  908. opciones
  909. No
  910. respuesta
  911. 2
  912. ende
  913. begine "psc"
  914. pregunta
  915.   ¿Cómo podemos cambiar la asignación e inicialización por defecto para
  916.   un objeto?
  917. respuesta
  918.  Sea la clase X. Podemos cambiar la inicialización por defecto declarando
  919.  el constructor: X (&X); La asignación por defecto la podemos cambiar de-
  920.  clarando la función del operador =: X& operator= (X&);
  921. ende
  922. begine "psc"
  923. pregunta
  924.   ¿Cuáles son los tres casos en los que se producen inicializaciones de
  925.   una determinada clase X?
  926. respuesta
  927.   1. Cuando la clase X es inicializada por otra clase X.
  928.   2. Cuando la clase X es pasada como argumento a una función.
  929.   3. Cuando la clase X es devuelta como el valor de una función.
  930. ende
  931. end
  932.  
  933. ; LECCION 6
  934. begin
  935. begine "test"
  936. pregunta
  937.   ¿Son equivalentes las dos declaraciones siguientes?
  938.   class b : d { /* ... */ };
  939.   class b : public d { /* ... */ };
  940. opciones
  941. Sí son equivalentes
  942. No son equivalentes
  943. respuesta
  944. 2
  945. ende
  946. begine "test"
  947. pregunta
  948.   ¿Se puede decir que la clase Y es una clase derivada de la clase X?
  949.   class X { /* ... */ };
  950.   class Y { private: class X x; public: /* ... */ };
  951. opciones
  952. No
  953. respuesta
  954. 2
  955. ende
  956. begine "pcc"
  957. pregunta
  958.   ¿Cuántos especificadores de acceso o modificadores de visibilidad
  959.   existen en C++?
  960. respuesta
  961. 3
  962. ende
  963. begine "psc"
  964. pregunta
  965.   ¿Hay alguna forma de acceder a un miembro privado de una clase sin
  966.   que el acceso se produzca desde una función miembro de esa clase?
  967. respuesta
  968.   Sí. Se puede acceder a un miembro privado de una clase, además de
  969.   desde los miembros de esa clase, desde una función o clase amiga a
  970.   esa clase.
  971. ende
  972. begine "test"
  973. pregunta
  974.   Sea
  975.     class d : private b { /* ... */ };
  976.   ¿Puede la clase d acceder a los miembros protected de la clase b?
  977. opciones
  978. Sí puede
  979. No puede
  980. respuesta
  981. 1
  982. ende
  983. begine "test"
  984. pregunta
  985.   Sea
  986.     class d : public b { /* ... */ };
  987.   ¿Puede la clase d acceder a los miembros private de la clase b?
  988. opciones
  989. Sí puede
  990. No puede
  991. respuesta
  992. 2
  993. ende
  994. begine "psc"
  995. pregunta
  996.   ¿Es correcto invocar al constructor de b de esta forma?
  997.   class b { private: int x; public: b (int i) { x = i; } };
  998.   class d : public b { public: d (int i) : (i) { } };
  999. respuesta
  1000. Sí se puede invocar al constructor de la clase base sin poner su nombre,
  1001. poniendo sólo sus argumentos. Esta forma se considera obsoleta en el ac-
  1002. tual estándar de C++ y se recomienda no utilizarla. Sería: d(int i):b(i){}
  1003. ende
  1004. begine "test"
  1005. pregunta
  1006.   ¿Puede tener una clase derivada una función miembro con el mismo
  1007.   nombre que una función miembro de la clase base?
  1008. opciones
  1009. Sí puede
  1010. No puede
  1011. respuesta
  1012. 1
  1013. ende
  1014. begine "test"
  1015. pregunta
  1016.   ¿Cuál es el orden de llamadas de los constructores de una clase
  1017.   derivada que también contiene objetos con constructores?
  1018. opciones
  1019. Constr clase base; Constr de los miembros; Constr de propia clase derivada
  1020. Constr de propia clase derivada; Constr de los miembros; Constr clase base
  1021. Constr de los miembros; Constr clase base; Constr de propia clase derivada
  1022. respuesta
  1023. 1
  1024. ende
  1025. begine "test"
  1026. pregunta
  1027.   ¿Es cierto que los destructores se llaman siempre en orden contrario
  1028.   al orden de llamadas de los constructores?
  1029. opciones
  1030. Sí es cierto
  1031. No es cierto
  1032. respuesta
  1033. 1
  1034. ende
  1035. begine "test"
  1036. pregunta
  1037.   ¿Es cierta la siguiente afirmación?
  1038.   Una clase base es un subtipo de sus clases derivadas.
  1039. opciones
  1040. Sí es cierta
  1041. No es cierta
  1042. respuesta
  1043. 2
  1044. ende
  1045. begine "test"
  1046. pregunta
  1047.  ¿Son equivalentes las asignaciones de pb1 y pb2?
  1048.  class base { /* ... */ } b; class derivada: public base { /* ... */ } d;
  1049.  base *pb1 = &d; base *pb2 = (derivada *) &d;
  1050. opciones
  1051. Sí son equivalentes
  1052. No son equivalentes
  1053. respuesta
  1054. 1
  1055. ende
  1056. begine "test"
  1057. pregunta
  1058.  ¿Son equivalentes las asignaciones de pb1 y pb2?
  1059.  class base { /* ... */ } b; class derivada: private base { /* ... */ } d;
  1060.  base *pb1 = &d; base *pb2 = (base *) &d;
  1061. opciones
  1062. Sí son equivalentes
  1063. No son equivalentes
  1064. respuesta
  1065. 2
  1066. ende
  1067. begine "psc"
  1068. pregunta
  1069.   ¿Qué debemos hacer para obligar al compilador que seleccione las
  1070.   funciones miembros a invocar, en tiempo de ejecución?
  1071. respuesta
  1072.   Debemos declarar tales funciones como virtuales, ello se consigue
  1073.   precediendo el prototipo de la función virtual con la palabra cla-
  1074.   ve virtual en la clase base.
  1075. ende
  1076. begine "test"
  1077. pregunta
  1078.  
  1079.   ¿Pueden ser los destructores funciones virtuales?
  1080. opciones
  1081. Sí pueden ser virtuales
  1082. No pueden ser virtuales
  1083. respuesta
  1084. 1
  1085. ende
  1086. begine "psc"
  1087. pregunta
  1088.   Si declaramos una función miembro como virtual en la clase base, y la
  1089.   declaramos en las clases derivadas con tipos de argumentos diferentes,
  1090.   ¿se aplica el mecanismo de función virtual?
  1091. respuesta
  1092.   En ese caso no se aplica el mecanismo de función virtual, puesto que al
  1093.   tener tipos de argumentos diferentes son funciones diferenciables y la
  1094.   función a invocar se selecciona sin problemas en tiempo de compilación.
  1095. ende
  1096. begine "psc"
  1097. pregunta
  1098.  
  1099.   ¿Qué es una función pura?
  1100. respuesta
  1101.   Una función pura es una función virtual declarada pero no definida en
  1102.   las clases bases.
  1103. ende
  1104. begine "psc"
  1105. pregunta
  1106.  
  1107.   ¿Cómo se declara una función virtual pura?
  1108. respuesta
  1109.   Una función virtual pura se declarara añadiendo
  1110.     = 0
  1111.   al final de la declaración de la función virtual.
  1112. ende
  1113. begine "test"
  1114. pregunta
  1115.   ¿Es posible redeclarar una función pura de una clase base como función
  1116.   pura nuevamente en su clase derivada?
  1117. opciones
  1118. Sí se puede
  1119. No se puede
  1120. respuesta
  1121. 1
  1122. ende
  1123. begine "test"
  1124. pregunta
  1125.   ¿Podemos definir una función virtual en una clase base y no redefinirla
  1126.   ni redeclararla en sus clases derivadas?
  1127. opciones
  1128. Sí se puede
  1129. No se puede
  1130. respuesta
  1131. 1
  1132. ende
  1133. begine "psc"
  1134. pregunta
  1135.  
  1136.   ¿Qué es una clase abstracta?
  1137. respuesta
  1138.   Una clase abstracta es una clase que tiene al menos una función
  1139.   virtual pura.
  1140. ende
  1141. begine "test"
  1142. pregunta
  1143.  
  1144.   ¿Se puede crear un objeto de una clase abstracta?
  1145. opciones
  1146. Sí se puede
  1147. No se puede
  1148. respuesta
  1149. 2
  1150. ende
  1151. begine "test"
  1152. pregunta
  1153.  
  1154.   ¿Están permitidas las referencias a una clase abstracta?
  1155. opciones
  1156. Sí están permitidas
  1157. No están permitidas
  1158. respuesta
  1159. 1
  1160. ende
  1161. begine "test"
  1162. pregunta
  1163.   ¿Qué tipo de funciones miembros es preferible utilizar si el mecanismo
  1164.   de selección dinámica de funciones no es absolutamente necesario?
  1165. opciones
  1166. Funciones miembros virtuales
  1167. Funciones miembros no virtuales
  1168. respuesta
  1169. 2
  1170. ende
  1171. begine "test"
  1172. pregunta
  1173.  
  1174.   ¿Puede ser una clase, clase base y clase derivada al mismo tiempo?
  1175. opciones
  1176. Sí puede ser clase base y clase derivada al mismo tiempo
  1177. No puede ser clase base y clase derivada al mismo tiempo
  1178. respuesta
  1179. 1
  1180. ende
  1181. begine "prpr"
  1182.  
  1183.   Implementa una clase llamada lista que haga diversas operaciones
  1184.   sobre una lista dinámica. A continuación desarolla dos clases
  1185.   derivadas de la clase base lista: la clase cola y la clase pila.
  1186.  
  1187. ende
  1188. begine "prpr"
  1189.  
  1190.   Implementa una clase ventana que haga diversas operaciones sobre una
  1191.   ventana de texto en la pantalla: visualizarla, borrarla, moverla; la
  1192.   ventana a visualizar podrá tener diversas formas de bordes, colores,
  1193.   cabeceras, sombras, etc.
  1194.  
  1195.   Una vez implementada la clase ventana podemos diseñar diversas clases
  1196.   que se sirvan de la clase ventana haciéndola base. Estas clases deri-
  1197.   vadas pueden ser, por ejemplo, una clase para hacer menús, una clase
  1198.   para visualizar un fichero en pantalla, etc.
  1199.  
  1200. ende
  1201. end
  1202.  
  1203. ; LECCION 7
  1204. begin
  1205. begine "psc"
  1206. pregunta
  1207.  
  1208.   ¿Cuál es la diferencia entre herencia simple y herencia múltiple?
  1209. respuesta
  1210.  La diferencia entre herencia simple y múltiple está que en la herencia
  1211.  simple, una clase derivada sólo puede tener una clase base, y en la
  1212.  herencia múltiple, una clase derivada puede tener más de una clase base.
  1213. ende
  1214. begine "test"
  1215. pregunta
  1216.  
  1217.   ¿Es legal una jerarquía circular en C++?
  1218. opciones
  1219. Sí es legal
  1220. No es legal
  1221. respuesta
  1222. 2
  1223. ende
  1224. begine "test"
  1225. pregunta
  1226.   struct b1 { void f (void); }; struct b2 { void f (void); };
  1227.   struct d : b1, b2 { void g (void) { f (); } };
  1228.   // ¿Qué función invoca la función d::g()?
  1229. opciones
  1230. La función b1::f()
  1231. La función b2::f()
  1232. Error de ambigüedad
  1233. respuesta
  1234. 3
  1235. ende
  1236. begine "test"
  1237. pregunta
  1238.  
  1239.   ¿Son necesarias las clases virtuales en la herencia simple?
  1240. opciones
  1241. Sí son necesarias
  1242. No son necesarias
  1243. respuesta
  1244. 2
  1245. ende
  1246. begine "test"
  1247. pregunta
  1248.   Sea la declaración
  1249.     class x : virtual public y, public z { /* ... */ };
  1250.   ¿Qué constructor es el primero que se invoca?
  1251. opciones
  1252. El constructor de la clase x
  1253. El constructor de la clase y
  1254. El constructor de la clase z
  1255. respuesta
  1256. 2
  1257. ende
  1258. begine "test"
  1259. pregunta
  1260.   Sea la declaración
  1261.     class x : virtual public y, public z { /* ... */ };
  1262.   ¿Qué destructor es el primero que se invoca?
  1263. opciones
  1264. El destructor de la clase x
  1265. El destructor de la clase y
  1266. El destructor de la clase z
  1267. respuesta
  1268. 1
  1269. ende
  1270. begine "test"
  1271. pregunta
  1272.  
  1273.   ¿Puede declararse un constructor como virtual?
  1274. opciones
  1275. Sí puede
  1276. No puede
  1277. respuesta
  1278. 2
  1279. ende
  1280. begine "test"
  1281. pregunta
  1282.  
  1283.   ¿Puede declararse un destructor como virtual?
  1284. opciones
  1285. Sí puede
  1286. No puede
  1287. respuesta
  1288. 1
  1289. ende
  1290. begine "test"
  1291. pregunta
  1292.   ¿Podemos definir funciones en un programa de C y de C++ que sean
  1293.   ejecutadas antes o después de que se ejecute la función main()?
  1294. opciones
  1295. Sí podemos
  1296. No podemos
  1297. respuesta
  1298. 1
  1299. ende
  1300. begine "test"
  1301. pregunta
  1302.  ¿Son equivalentes las asignaciones a c::x1 y c::x2?
  1303.  class c { private: int x1, x2; public: c (int x): x1 (x) { x2 = x; } };
  1304. opciones
  1305. Sí son equivalentes
  1306. No son equivalentes
  1307. respuesta
  1308. 1
  1309. ende
  1310. begine "test"
  1311. pregunta
  1312.  ¿Serán invocados los destructores de los objetos globales si terminamos
  1313.  el programa con la función abort()?
  1314. opciones
  1315. Sí serán invocados
  1316. No serán invocados
  1317. respuesta
  1318. 2
  1319. ende
  1320. begine "test"
  1321. pregunta
  1322.  ¿Serán invocados los destructores de los objetos globales si terminamos
  1323.  el programa con la función exit()?
  1324. opciones
  1325. Sí serán invocados
  1326. No serán invocados
  1327. respuesta
  1328. 1
  1329. ende
  1330. begine "test"
  1331. pregunta
  1332.   class b { }; // ¿Son legales las declaraciones de d1, d2, d3 y d4?
  1333.   class d1: b, b { };            class d2: virtual b, b { };
  1334.   class d3: b, virtual b { };    class d4: virtual b, virtual b { };
  1335. opciones
  1336. Sí lo son
  1337. No lo son
  1338. respuesta
  1339. 2
  1340. ende
  1341. begine "prpr"
  1342.  
  1343.   Desarrolla una clase llamada posición que contenga los datos x e y
  1344.   junto con los métodos correspondientes.
  1345.  
  1346.   A continuación desarrolla una clase derivada de posición llamada punto
  1347.   que tenga como dato una variable booleana llamada visible, junto con
  1348.   los correspondientes métodos.
  1349.  
  1350.   La clase punto sirve de clase base a las clases línea y arco. La clase
  1351.   línea es base a su vez de la clase triángulo. Del mismo modo la clase
  1352.   arco es clase base de la clase círculo.
  1353.  
  1354.   Por último, podemos crear la clase circulo_con_triangulo, que tendría
  1355.   como clases bases las clases círculo y triángulo. Esta clase dibuja
  1356.   un círculo con un triángulo inscrito.
  1357.  
  1358.   Otras clases: clase mensaje que tenga como clase base la clase posi-
  1359.   ción, y que escribe una cadena de caracteres a partir de las coorde-
  1360.   nadas x e y de posición; y la clase circulo_con_mensaje, que tendría
  1361.   como clases bases las clases círculo y mensaje, y escribirá un círcu-
  1362.   lo que tenga en su interior (centrado) el mensaje de su clase base.
  1363.  
  1364. ende
  1365. end
  1366.  
  1367. ; LECCION 8
  1368. begin
  1369. begine "psc"
  1370. pregunta
  1371.   ¿Cuáles son los principales ficheros de cabecera relacionados con la
  1372.   entrada y la salida en C++?
  1373. respuesta
  1374. Los ficheros pedidos son los tres siguientes: el fichero iostream.h (flu-
  1375. jos básicos), el fichero fstream.h (flujos relacionados con ficheros) y el
  1376. fichero strstream.h (flujos relacionados con arrays de bytes en memoria).
  1377. ende
  1378. begine "psc"
  1379. pregunta
  1380.  
  1381.   ¿Cuáles son los flujos predefinidos en el fichero iostream.h?
  1382. respuesta
  1383.   Los flujos predefinidos en el fichero iostream.h son:
  1384.   cin, cout, cerr y clog.
  1385. ende
  1386. begine "psc"
  1387. pregunta
  1388.   ¿Con qué funciones miembros de la clase ios podemos modificar los
  1389.   indicadores de formato (skipws, left, right, internal, dec, oct,
  1390.   hex, ...)?
  1391. respuesta
  1392.   Los indicadores de formato los podemos activar o desactivar con las
  1393.   funciones miembros ios::flags(), ios::setf() y ios::unsetf().
  1394. ende
  1395. begine "psc"
  1396. pregunta
  1397.   ¿Cuándo es especialmente interesante consultar los bits de estado del
  1398.   flujo con las funciones que nos informan del estado (funciones como
  1399.   ios::rdstate(), ios::eof(), ios::fail(), ios::bad(), ios::good(), ...?
  1400. respuesta
  1401.   Las funciones citadas son especialmente interesantes cuando trabajamos
  1402.   con flujos de ficheros.
  1403. ende
  1404. begine "psc"
  1405. pregunta
  1406. ¿Cuáles son las principales funciones de lectura declaradas en la clase
  1407. istream?
  1408. respuesta
  1409. Las principales funciones de lectura declaradas en la clase istream son:
  1410. istream::get(), istream::getline() y istream::read(). También en esta
  1411. clase se sobrecarga el operador >> para realizar lecturas sobre el flujo.
  1412. ende
  1413. begine "psc"
  1414. pregunta
  1415. ¿Cuáles son las principales funciones de escritura declaradas en la clase
  1416. ostream?
  1417. respuesta
  1418. Las principales funciones de escritura declaradas en la clase ostream son:
  1419. istream::put() y istream::write(). También en esta clase se sobrecarga el
  1420. operador << para realizar escrituras sobre el flujo.
  1421. ende
  1422. begine "psc"
  1423. pregunta
  1424.  
  1425.   ¿Cuáles son las clases bases de la clase iostream?
  1426. respuesta
  1427.  
  1428.   Las clases bases de la clase iostream son istream y ostream.
  1429. ende
  1430. begine "psc"
  1431. pregunta
  1432.  
  1433.   ¿Para qué se suelen declarar objetos de tipo ifstream?
  1434. respuesta
  1435.   Los objetos de tipo ifstream se utilizan para trabajar con ficheros
  1436.   de sólo lectura.
  1437. ende
  1438. begine "psc"
  1439. pregunta
  1440.  
  1441.   ¿Para qué se suelen declarar objetos de tipo ofstream?
  1442. respuesta
  1443.   Los objetos de tipo ofstream se utilizan para trabajar con ficheros
  1444.   de sólo escritura.
  1445. ende
  1446. begine "psc"
  1447. pregunta
  1448.  
  1449.   ¿Para qué se suelen declarar objetos de tipo fstream?
  1450. respuesta
  1451.   Los objetos de tipo fstream se suelen utilizar para trabajar con
  1452.   ficheros en los que se puede leer y escribir simultáneamente.
  1453. ende
  1454. begine "psc"
  1455. pregunta
  1456.  
  1457.   ¿Para qué se suelen declarar objetos de tipo istrstream?
  1458. respuesta
  1459.   Los objetos de tipo istrstream se utilizan para trabajar con arrays
  1460.   de bytes de sólo lectura.
  1461. ende
  1462. begine "psc"
  1463. pregunta
  1464.  
  1465.   ¿Para qué se suelen declarar objetos de tipo ostrstream?
  1466. respuesta
  1467.   Los objetos de tipo ostrstream se utilizan para trabajar con arrays
  1468.   de bytes de sólo escritura.
  1469. ende
  1470. begine "psc"
  1471. pregunta
  1472.  
  1473.   ¿Para qué se suelen declarar objetos de tipo strstream?
  1474. respuesta
  1475.   Los objetos de tipo strstream se suelen utilizar para trabajar con
  1476.   arrays de bytes en los que se puede leer y escribir simultáneamente.
  1477. ende
  1478. begine "psc"
  1479. pregunta
  1480.  
  1481.   ¿Qué clase está declarada en el fichero bcd.h?
  1482. respuesta
  1483.   En el fichero bcd.h está declarada la clase bcd, la cual nos permite
  1484.   trabajar con números bcd (binary-code decimal).
  1485. ende
  1486. begine "psc"
  1487. pregunta
  1488.  
  1489.   ¿Qué clase está declarada en el fichero complex.h?
  1490. respuesta
  1491.   En el fichero complex.h está declarada la clase complex, la cual nos
  1492.   permite trabajar con números complejos (números que tienen parte real
  1493.   y parte imaginaria).
  1494. ende
  1495. begine "prpr"
  1496.  
  1497.   Añade al programa del ejemplo de string de esta lección el operador
  1498.   de concatenación + y el operador += con el significado de "añadir al
  1499.   final".
  1500. ende
  1501. begine "prpr"
  1502.  
  1503.   Pasa los ejemplos de C de la lección 9 del tutor de C (lección dedicada
  1504.   a la E/S y a los ficheros) a programas C++, esto es, a notación C++.
  1505. ende
  1506. begine "prpr"
  1507.  
  1508.   Transforma el programa compresor/descompresor, desarrollado en C en la
  1509.   tarea de ejemplos de la lección 10 del tutor de C, a un programa C++
  1510.   mejorándolo en el sentido de que pueda comprimir (y posteriormente des-
  1511.   comprimir) varios ficheros en un sólo fichero comprimido.
  1512. ende
  1513. end
  1514.